package novel.core.common.exception;
import lombok.extern.slf4j.Slf4j;
import novel.core.common.constant.ErrorCodeEnum;
import novel.core.common.respond.RestRespond;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 通用的异常处理器
 */
@Slf4j

@RestControllerAdvice
public class CommonExceptionHandler {

    /**
     * 处理数据校验异常,返回RestRespond用户请求参数错误
     * */
    // Spring 框架提供的一个注解，用于定义处理特定类型异常的方法
    @ExceptionHandler(BindException.class)
    public RestRespond<Void> handlerBindException(BindException e){
        log.error(e.getMessage(),e);
        return RestRespond.fail(ErrorCodeEnum.USER_REQUEST_PARAM_ERROR);
    }

    /**
     * 处理业务异常,返回RestRespond不同异常状态
     * */
    @ExceptionHandler(BusinessException.class)
    public RestRespond<Void> handlerBusinessException(BusinessException e){
        log.error(e.getMessage(),e);
        return RestRespond.fail(e.getErrorCodeEnum());
    }

    /**
     * 处理系统异常,返回RestRespond系统错误
     * */
    @ExceptionHandler(Exception.class)
    public RestRespond<Void> handlerException(Exception e){
        log.error(e.getMessage(),e);
        return RestRespond.error();
    }

}
